package velhaxo.server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

import velhaxo.model.Jogo;

public class ServidorXO implements Runnable
{
	private Socket socketUm;
	private Socket socketDois;
	
	
	public static void main(String[] args)
	{
		new Thread(new ServidorXO(),"ServidorXO").start();
	}

	@Override
	public void run()
	{
		obterSockets();
		inciar();
	}

	private void inciar()
	{
		Jogo jogo = new Jogo();
		
		try
		{
			DataInputStream inUm = new DataInputStream(socketUm.getInputStream());
			String nomeJogadorUm = inUm.readUTF();
			
			DataInputStream inDois = new DataInputStream(socketDois.getInputStream());
			String nomeJogadorDois = inDois.readUTF();
			
			DataOutputStream outUm = new DataOutputStream(socketUm.getOutputStream());
			outUm.writeUTF(nomeJogadorDois+"-p2");
			
			DataOutputStream outDois = new DataOutputStream(socketDois.getOutputStream());
			outDois.writeUTF(nomeJogadorUm+"-p1");
			
			boolean ganhadorEncontrado = false;
			List<String> jogadaVencedora = null;
			while(!ganhadorEncontrado)
			{
				String jogadaP1 = inUm.readUTF();
				jogo.getJogadasP1().add(jogadaP1);
				jogadaVencedora = jogo.checarVencedor(jogo.getJogadasP1());
				if(jogadaVencedora.size() > 0)
				{
					//manda para o client de outra forma
					System.out.println();
					outDois.writeUTF("Perdeu");
					outUm.writeUTF("Ganhou");
					break;
				}
				outDois.writeUTF(jogadaP1);
				
				String jogadaP2 = inDois.readUTF();
				jogo.getJogadasP2().add(jogadaP2);
				jogadaVencedora = jogo.checarVencedor(jogo.getJogadasP2());
				if(jogadaVencedora.size() > 0)
				{
					//manda para o client de outra forma
					System.out.println();
					outUm.writeUTF("Perdeu");
					outDois.writeUTF("Ganhou");
					break;
				}
				outUm.writeUTF(jogadaP2);
			}
			
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void obterSockets()
	{
		ServerSocket serverSocket;
		try
		{
			serverSocket = new ServerSocket(4444);
			socketUm = serverSocket.accept();
			socketDois = serverSocket.accept();
			
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

}
